////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modflashdecv1.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "modflashdecv1.h"
#include "parametersetmanager.h"

MODFLASHDECV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixFlashDecV1TypeClass::chromatixFlashDecV1TypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(moduleID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(enableFlag);
    PARAMETER_INITIALIZE(mainFlashPt);
    PARAMETER_INITIALIZE(interpRatioLEDPt);
    PARAMETER_INITIALIZE(interpRatioPreflash);
    PARAMETER_INITIALIZE(FlashGainAdjust);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixFlashDecV1TypeClass::chromatixFlashDecV1TypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(moduleID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(enableFlag);
    PARAMETER_INITIALIZE(mainFlashPt);
    PARAMETER_INITIALIZE(interpRatioLEDPt);
    PARAMETER_INITIALIZE(interpRatioPreflash);
    PARAMETER_INITIALIZE(FlashGainAdjust);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixFlashDecV1TypeClass::~chromatixFlashDecV1TypeClass()
{
    UnloadchromatixFlashDecV1Type(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixFlashDecV1TypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "flashDecV1")) == 0)
    {
        name = "flashDecV1";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashSingleLEDWBPtV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashSingleLEDWBPtV1Type(
    ParameterFileSymbolTableEntry* entry,
    modFlashSingleLEDWBPtV1Type* structure)
{
    BOOL result = TRUE;
    structure->ledType = (modFlashLEDType)entry->ReadEnum(&result);
    result = result && awbglobalelements::awbglobalelementsClass::LoadawbPointDataType(entry, &structure->ledWBPt);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashAdjV1KTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashAdjV1KTriggerDataType(
    ParameterFileSymbolTableEntry* entry,
    modFlashAdjV1KTriggerDataType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);
    result = result && awbglobalelements::awbglobalelementsClass::LoadawbPointDataType(entry, &structure->triggerData);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashAdjV1CCTTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashAdjV1CCTTriggerDataType(
    ParameterFileSymbolTableEntry* entry,
    modFlashAdjV1CCTTriggerDataType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modFlashAdjV1KTriggerDataType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodFlashAdjV1KTriggerDataType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashAdjV1LuxTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashAdjV1LuxTriggerDataType(
    ParameterFileSymbolTableEntry* entry,
    modFlashAdjV1LuxTriggerDataType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modFlashAdjV1CCTTriggerDataType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodFlashAdjV1CCTTriggerDataType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashAdjV1DecisionPtType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashAdjV1DecisionPtType(
    ParameterFileSymbolTableEntry* entry,
    modFlashAdjV1DecisionPtType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modFlashAdjV1LuxTriggerDataType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodFlashAdjV1LuxTriggerDataType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashGainAdjV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashGainAdjV1Type(
    ParameterFileSymbolTableEntry* entry,
    modFlashGainAdjV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modFlashAdjV1LuxTriggerDataType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodFlashAdjV1LuxTriggerDataType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashSecondLevelType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashSecondLevelType(
    ParameterFileSymbolTableEntry* entry,
    modFlashSecondLevelType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);
    result = result && awbglobalelements::awbglobalelementsClass::LoadawbFloatDataType(entry, &structure->triggerData);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashFirstLevelType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashFirstLevelType(
    ParameterFileSymbolTableEntry* entry,
    modFlashFirstLevelType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modFlashSecondLevelType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodFlashSecondLevelType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashInterpRatioLEDV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashInterpRatioLEDV1Type(
    ParameterFileSymbolTableEntry* entry,
    modFlashInterpRatioLEDV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW awbglobalelements::awbTriggerDataFloatType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && awbglobalelements::awbglobalelementsClass::LoadawbTriggerDataFloatType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modFlashInterRatioPreflashV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadmodFlashInterRatioPreflashV1Type(
    ParameterFileSymbolTableEntry* entry,
    modFlashInterRatioPreflashV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modFlashFirstLevelType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodFlashFirstLevelType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixFlashDecV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::LoadchromatixFlashDecV1Type(
    ParameterFileSymbolTableEntry* entry,
    chromatixFlashDecV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadmoduleIDType(entry, &structure->moduleID);
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && entry->ReadInt32(&structure->enableFlag);
    result = result && LoadmodFlashSingleLEDWBPtV1Type(entry, &structure->mainFlashPt);
    result = result && LoadmodFlashInterpRatioLEDV1Type(entry, &structure->interpRatioLEDPt);
    result = result && LoadmodFlashInterRatioPreflashV1Type(entry, &structure->interpRatioPreflash);
    result = result && LoadmodFlashGainAdjV1Type(entry, &structure->FlashGainAdjust);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixFlashDecV1TypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixFlashDecV1Type::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);
    result = result && entry->ReadInt32(&structure->incr_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashAdjV1CCTTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashAdjV1CCTTriggerDataType(
    modFlashAdjV1CCTTriggerDataType* structure)
{
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashAdjV1LuxTriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashAdjV1LuxTriggerDataType(
    modFlashAdjV1LuxTriggerDataType* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmodFlashAdjV1CCTTriggerDataType(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashAdjV1DecisionPtType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashAdjV1DecisionPtType(
    modFlashAdjV1DecisionPtType* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmodFlashAdjV1LuxTriggerDataType(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashGainAdjV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashGainAdjV1Type(
    modFlashGainAdjV1Type* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmodFlashAdjV1LuxTriggerDataType(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashFirstLevelType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashFirstLevelType(
    modFlashFirstLevelType* structure)
{
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashInterpRatioLEDV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashInterpRatioLEDV1Type(
    modFlashInterpRatioLEDV1Type* structure)
{
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modFlashInterRatioPreflashV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadmodFlashInterRatioPreflashV1Type(
    modFlashInterRatioPreflashV1Type* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmodFlashFirstLevelType(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixFlashDecV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixFlashDecV1TypeClass::UnloadchromatixFlashDecV1Type(
    chromatixFlashDecV1Type* structure)
{
    UnloadmodFlashInterpRatioLEDV1Type(&structure->interpRatioLEDPt);
    UnloadmodFlashInterRatioPreflashV1Type(&structure->interpRatioPreflash);
    UnloadmodFlashGainAdjV1Type(&structure->FlashGainAdjust);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixFlashDecV1TypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixFlashDecV1TypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixFlashDecV1TypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixFlashDecV1Type(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


MODFLASHDECV1_NAMESPACE_END
